package com.xxl.job.admin.core.util;

import com.xxl.job.admin.core.conf.XxlJobAdminConfig;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.EncodedResource;
import org.springframework.core.io.support.PropertiesLoaderUtils;

import java.io.IOException;
import java.text.MessageFormat;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;

/**
 * i18n util
 *
 * @author xuxueli 2018-01-17 20:39:06
 */
public class I18nUtil {

  private static Logger logger = LoggerFactory.getLogger(I18nUtil.class);

  private static Properties prop = null;

  public static Properties loadI18nProp() {
    if (prop != null) {
      return prop;
    }
    try {
      // build i18n prop
      String i18n = XxlJobAdminConfig.getAdminConfig().getI18n();
      String i18nFile = MessageFormat.format("i18n/message_{0}.properties", i18n);

      // load prop
      Resource resource = new ClassPathResource(i18nFile);
      EncodedResource encodedResource = new EncodedResource(resource, "UTF-8");
      prop = PropertiesLoaderUtils.loadProperties(encodedResource);
    } catch (IOException e) {
      logger.error(e.getMessage(), e);
    }
    return prop;
  }

  /**
   * get val of i18n key
   *
   * @param key
   * @return
   */
  public static String getString(String key) {
    return loadI18nProp().getProperty(key);
  }

  /**
   * get mult val of i18n mult key, as json
   *
   * @param keys
   * @return
   */
  public static String getMultString(String... keys) {
    Map<String, String> map = new HashMap<String, String>();

    Properties prop = loadI18nProp();
    if (keys != null && keys.length > 0) {
      for (String key : keys) {
        map.put(key, prop.getProperty(key));
      }
    } else {
      for (String key : prop.stringPropertyNames()) {
        map.put(key, prop.getProperty(key));
      }
    }

    String json = JacksonUtil.writeValueAsString(map);
    return json;
  }

}
